int translate_y,
GtkSnapshotCollectFunc collect_func)
{
- GtkSnapshotState state = { 0, };
+ const gsize n_states = snapshot->state_stack->len;
+ GtkSnapshotState *state;
- state.translate_x = translate_x;
- state.translate_y = translate_y;
- state.collect_func = collect_func;
- state.start_node_index = snapshot->nodes->len;
- state.n_nodes = 0;
+ g_array_set_size (snapshot->state_stack, n_states + 1);
+ state = &g_array_index (snapshot->state_stack, GtkSnapshotState, n_states);
- g_array_append_val (snapshot->state_stack, state);
+ state->translate_x = translate_x;
+ state->translate_y = translate_y;
+ state->collect_func = collect_func;
+ state->start_node_index = snapshot->nodes->len;
+ state->n_nodes = 0;
- return &g_array_index (snapshot->state_stack, GtkSnapshotState, snapshot->state_stack->len - 1);
+ return state;
}
static GtkSnapshotState *